#!/bin/bash

cierralanzador

case $LANG in
  es*)
    CARP="Recuperados"
    WARN="Arrastre el directorio del dispositivo montado\n para intentar recuperar su contenido."
    INFO="El dispositivo elegido no está montado. Si es un usuario avanzado y sabe lo que hace, pulse Aceptar."
    TXT1="Ya existe una carpeta llamada <b>$CARP</b> en su carpeta personal.\nPor favor, renombrela y vuelva a iniciar el proceso."
    TIT1="Recuperando archivos..."
    TXT2="Esta operación puede tardar bastante tiempo.
Por favor, espere.

<b>Explorando...</b>"
    ;;
  gl*)
    CARP="Recuperados"
    WARN="Arrastre o directorio do dispositivo montado\n para tentar recuperar o seu contido."
    INFO="O dispositivo elixido non está montado. Se é un usuario avanzado e sabe o que fai, prema en Aceptar."
    TXT1="Xa existe un cartafol chamado <b>$CARP</b> no seu cartafol persoal.\nPor favor, renomeea e volva a iniciar o proceso."
    TIT1="Recuperando ficheiros..."
    TXT2="Esta operación pode tardar bastante tempo.
Por favor, agarde.

<b>Explorando...</b>"
    ;;
  *)
    CARP="Recovered"
    WARN="Drag & drop a mounted folder to try recovering its content."
    INFO="Choosen device is not mounted. If you are an advanced user and you know what you are doing, press OK."
    TXT1="There is already a folder called <b>$CARP</b>.\nPlease, rename it and restart the process."
    TIT1="Recovering files..."
    TXT2="This process could take a long time.
Please, wait.

<b>Exploring...</b>"
    ;;
esac


rm /tmp/extensiones
rm /tmp/listadearchivosrecuperados
rm /tmp/listaextensiones
rm /tmp/ripeador
rm -r /tmp/ordenados
rm -r /tmp/recuperados
mkdir -p /tmp/recuperados
mkdir -p /tmp/ordenados
cd /tmp
horainicio=`date +%s`

# Pequeño añadido para que soporte la extracción de recursos de archivos de datos arrastrados sobre el icono
ARRASTRADO="$1"
if [ "$1" != "" ];then
	DEVICE="$ARRASTRADO"
	ARRASTRADO=""
fi


if [ "$ARRASTRADO" = "" ];then

	if [ "$DEVICE" = "" ];then
	elegido=`encuentra-discos|zenity --list --title "Dispositivo" --text "Elija un dispositivo para intentar encontrar archivos en él." --width 500 --height 300 --column Dispositivos`
		if [ "$elegido" = "" ];then
			exit 0
		fi
	DEVICE=`echo "$elegido"|awk -F', ' '{print $2}'`
	tamaniodevice=`echo "$elegido"|awk -F', ' '{print $3}'`
	namedevice=`echo "$elegido"|awk -F', ' '{print $1}'`
	else
	# Si es un archivo lo que se ha arrastrado
	tamaniodevice=`du -h "$DEVICE"|awk '{print $1}'`
	namedevice=`basename $DEVICE`
	fi


	echo "Photorec (funciona bien en la mayoría de los casos)" >>/tmp/ripeador
	echo "Foremost (útil cuando el desastre es mayúsculo)" >>/tmp/ripeador
	echo "Ripper (útil para archivos con formatos raros o antiguos)">>/tmp/ripeador
	echo "TODOS (sin duda, la opción más lenta)">>/tmp/ripeador
	elegido=`cat /tmp/ripeador|zenity --list --title "Extraer archivos de $namedevice $tamaniodevice" --text "Elija el ripeador que desea utilizar. También puede aplicar automáticamente los tres y el
programa se encargará de eliminar los archivos duplicados que sean exactamente iguales." --width 500 --height 300 --column Ripeador`
	RIPEADOR=`echo "$elegido"|cut -d" " -f1`
	
	if [ "$RIPEADOR" = "" ];then
		exit 0
	fi

	case "$RIPEADOR" in

		Photorec*)
			echo "Photorec"
			xterm -iconic -e photorec /d /tmp/recuperados/photorec /cmd $DEVICE partition_none,wholespace,fileopt,everything,enable,options,search &
			sleep 2
  			(while [ "$(pidof photorec)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando..." --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall photorec
			fi
			
		;;

		Foremost*)
			echo "Foremost"
			xterm -iconic -e foremost -v -t all -i $DEVICE -o /tmp/recuperados/foremost &
			sleep 2
  			(while [ "$(pidof foremost)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando..." --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall foremost
			fi
		;;

		Ripper*)
			echo "Ripper"
			mkdir -p /tmp/recuperados/ripper
			cd /tmp/recuperados/ripper
			
			xterm -iconic -e ripper $DEVICE &
			sleep 2
  			(while [ "$(pidof ripper)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando..." --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall ripper
			fi
		;;

		TODOS* | ALL*)
			echo "Todos"
			echo "Photorec"
			xterm -iconic -e photorec /d /tmp/recuperados/photorec /cmd $DEVICE partition_none,wholespace,fileopt,everything,enable,options,search &
			sleep 2
  			(while [ "$(pidof photorec)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando con Photorec..." --width 400 --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall photorec
			fi

			echo "Foremost"
			xterm -iconic -e foremost -v -t all -i $DEVICE -o /tmp/recuperados/foremost &
			sleep 2
  			(while [ "$(pidof foremost)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando con Foremost..." --width 400 --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall foremost
			fi

			echo "Ripper"
			mkdir /tmp/recuperados/ripper
			cd /tmp/recuperados/ripper
			xterm -iconic -e ripper $DEVICE &
			sleep 2
  			(while [ "$(pidof ripper)" ];do
				#echo "#Buscando archivos"
				n=`find /tmp/recuperados/ -type f |wc -l`
				echo "#$n archivos encontrados"
				sleep 5
  				done)|zenity --title="Buscando con Ripper..." --width 400 --progress --pulsate --auto-close
  			
			if [ "$?" = "1" ];then
				killall ripper
			fi


		;;
	esac
	
	(
	echo 15
	echo "#Purgando archivos repetidos"
	rdfind -deleteduplicates true /tmp/recuperados
	sleep 1
	echo "#Ordenando archivos recuperados"
	find /tmp/recuperados -type f -name "*" -exec basename `echo {}` >>/tmp/listadearchivosrecuperados \;
	sleep 1
	echo 30
	for file in `cat /tmp/listadearchivosrecuperados`;do
		filename="${file##*/}"
		dir="${fullpath%$filename}"
		base="${filename%.[^.]*}"
		ext="${filename:${#base} + 1}"
		if [[ -z "$base" && -n "$ext" ]]; then          
        	base=".$ext"
        	ext=""
    	fi
		 echo "$ext">>/tmp/extensiones
	done
	echo 40
	sort -u /tmp/extensiones >/tmp/listaextensiones
	for extension in `cat /tmp/listaextensiones`;do mkdir -p /tmp/ordenados/$extension;done
	echo "#Organizando archivos en capetas"
	sleep 1
	echo 60
	for extension in `cat /tmp/listaextensiones |awk '{print $1}'`;do
		cd /tmp/recuperados
		 find . -type f -name *.${extension} -exec mv {} /tmp/ordenados/${extension}/ \; 
	done
	echo 90
	sleep 1
	find /tmp/ordenados -type d -empty -delete
	echo 100
	echo "#Terminando"
	sleep 1
	)|zenity --progress --auto-close --auto-kill --width 400 --title="Purgando y ordenando archivos..."
fi



horafin=`date +%s`
totaltiempo=$(($horafin-$horainicio))
totaltiempo=$(($totaltiempo/60))
totalarchivosencontrados=`find /tmp/ordenados/ -type f |wc -l`
zenity --info --text "Se han encontrado $totalarchivosencontrados archivos en total
en $totaltiempo minutos.

A continuación se abrirá una carpeta con los archivos encontrados.
Cópielos a un lugar seguro, pues ahora mismo están en una carpeta
temporal y al reiniciar el equipo desaparecerán." 

mcaja /tmp/ordenados






#funcion_barra_progreso (){
#  (while [ "$(pidof ripper)" ];do
#
#  PORCENTAJE=`tail -n1 /tmp/temp|awk '{print $6}'|cut -d "." -f1`
#  echo $PORCENTAJE;
#  done)|
#  zenity --title="$TIT1" --progress --text "$TXT2" --auto-close
#
#  killall ripper
#  mcaja $HOME/$CARP
#  
#  exit 0
#}
#
#
#DEVICE=`mount|grep "$1"|awk '{print $1}' -`
#if [ -f /tmp/temp ]; then
#  rm /tmp/temp
#fi
#
#if [ -d $HOME/$CARP ]; then
#  zenity --warning --text "$TXT1"
#  exit 0
#fi
#
#mkdir -p $HOME/$CARP
#cd $HOME/$CARP
#
# Si se ha arrastrado un dispositivo desmontado, un dispositivo de /dev directamente o un archivo...
#if [ -z "$DEVICE" ];then
#  zenity --question --text="$INFO"
#  CONTINUAR=`echo $?`
#  if [ "$CONTINUAR" == "0" ];then
#    # Si es un directorio vacío no hay nada que hacer.
#    if [ -d "$1" ];then
#      exit 0
#    else
#      ripper "$1" > /tmp/temp&
#      funcion_barra_progreso
#    fi
#  else 
#    exit 0
#  fi
#	
#fi

#ripper $DEVICE > /tmp/temp&
#funcion_barra_progreso
